Istio WasmPlugin

개요

와즘 플러그인은 엔보이와즘 지원에 발 맞춰 이를 더 편하고 안정된 형태로 제공하기 위해 만들어진 리소스이다.[1]
사실 이스티오 엔보이필터로도 이걸 넣는 게 불가능한 건 아니지만, 조금 더 간단한 형태를 만들어낸 것이다.

일단 외부의 와즘 코드 주소를 명시해줘야 한다.
당연히 그래야 해당 코드를 가져와서 적용을 시킬 수 있을 것이다.
와즘 소스는 OCI를 준수하는 레포지토리에 전부 올릴 수 있게 돼있으며, 해당 주소에서 데이터를 받아오면 된다.

아키텍처


큰 레벨에서 아키텍처는 이러한 모양을 가지고 있다.
일단 엔보이 필터로서 동작을 하긴 한다.
해당 필터에서 지원하는 몇가지 api가 있고, 이를 기반으로 와즘 바이너리가 동작할 수 있는 것이다.

설정 적용 흐름

코드를 가져오는 방식은 다음과 같다.

먼저 istiod가 이 리소스를 읽고, 해당 정보를 프록시에 전달한다.
그럼 pilot-agent가 직접 해당 주소에서 바이너리를 가져오며, 엔보이로 하여금 해당 바이너리를 참조하도록 만든다.

양식 작성법

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: openid-connect
  namespace: istio-ingress
spec:
  selector:
    matchLabels:
      istio: ingressgateway
  phase: AUTHN
  priority: 1000
  url: oci://private-registry:5000/openid-connect/openid:latest
  imagePullPolicy: IfNotPresent
  imagePullSecret: private-registry-pull-secret
  pluginName: test
  pluginConfig:
    openid_server: authn
    openid_realm: ingress
  type: NETWORK

phase 필드로 어떤 필터 체인에 들어갈지 지정한다.

여러 와즘 플러그인이 들어갈 때 priority의 값이 클수록 먼저 들어간다.

그리고 url을 통해 바이너리를 가져올 주소를 넣으면 된다.
이때 스킴은 기본은 oci이고, 프록시 파일 시스템이 이미 있다면 file을 써도 된다.
http도 가능.

pluginName을 통해 엔보이 내 설정에서 사용될 이름을 설정한다.
pluginConfig는 여러 키값쌍을 넣어 와즘 바이너리에서 쓰일 인자를 넣는다.

type은 어떤 와즘 익스텐션인지 나타낸다.
현재 HTTP, NETWORK가 가능한데 이게 결국 해당 와즘이 사용할 수 있는 인터페이스를 나타내기 때문에 잘 지정해야 한다.
C++ 코드로 제공하는 인터페이스는 이런 게 있다고 한다.[2]

관련 문서

EXPLAIN - 파생 문서

이름0related생성 일자

Dataview: No results to show for table query.

기타 문서

Z0-연관 knowledge, Z1-트러블슈팅 Z2-디자인,설계, Z3-임시, Z5-프로젝트,아카이브, Z8,9-미분류,미완
이름1코드타입생성 일자
엔보이에 와즘 플러그인 적용해보기Z8topic2025-06-09 02:29
# 참고
  1. https://istio.io/latest/blog/2021/wasm-api-alpha/ ↩︎

  2. https://github.com/proxy-wasm/proxy-wasm-cpp-host/blob/b7e690703c7f26707438a2f1ebd7c197bc8f0296/include/proxy-wasm/context_interface.h#L257 ↩︎